/*
 * CTRL_RevisarSolicitud.java
 *
 * Created on October 9, 2007, 7:36 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarAyudantes;

import web.util.Constantes;
import entidad.Persona;
import entidad.ayudantias.Solicitudayudantia;
import entidad.ayudantias.TipoAyudantia;
import entidad.ayudantias.TipoAyudantia.TipoAyudantiaEnum;
import hero.interfaces.BnNodeValue;
import hero.interfaces.UserRegistration;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.Ayudantias.SolicitarAyudantes.RevisarSolicitud;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.*;
import web.util.HtmlEntities;
import web.util.SendMailEspol;

/**
 *s
 * @author kabad
 */
public class CTRL_RevisarSolicitud extends CTRL_Base {

    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarAyudantes;
    private final String nombreActividad = Constantes.SolicitarAyudantes.revisarSolicitud;
    private RevisarSolicitud gui;
    private UserRegistration userRegistration;

    /** Creates a new instance of CTRL_RevisarSolicitud */
    public CTRL_RevisarSolicitud(RevisarSolicitud gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        userRegistration = logica.getUserRegistration();

        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudayudantia solicitudAyudantia;
        TipoAyudantia tipoAyudantia;
        HtmlEntities htmlEntities = new HtmlEntities();
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitudAyudantia = logica.getLogAyudantia().leerSolicitudayudantiaNivel2(idSolicitud);
            tipoAyudantia = logica.leerTipoAyudantia(solicitudAyudantia);
            Persona personaProfesor = solicitudAyudantia.getProfesor().getPersona();
            gui.getDetalleSolicitarAyudantes().getStSolicitante1().setText(personaProfesor.toString());
            gui.getDetalleSolicitarAyudantes().getStTipoAyudantia1().setText(tipoAyudantia.getNombre());
            String nombreAyudantia = "";
            if (tipoAyudantia.getTipo() == TipoAyudantiaEnum.ACADEMICA) {
                nombreAyudantia = solicitudAyudantia.getMateria().getNombre();
                gui.getDetalleSolicitarAyudantes().getStNombreAyudantia1().setText(nombreAyudantia);
            } else {
                nombreAyudantia = solicitudAyudantia.getAyudantiavaria().getNombre();
                gui.getDetalleSolicitarAyudantes().getStNombreAyudantia1().setText(nombreAyudantia);
            }
            gui.getDetalleSolicitarAyudantes().getStNumHoras1().setText(solicitudAyudantia.getHorasAyudantias() + " hora(s)");          
            gui.getDetalleSolicitarAyudantes().getStFechaInicio().setText(solicitudAyudantia.getFechainicioayudantia());
            gui.getDetalleSolicitarAyudantes().getStFechaFin().setText(solicitudAyudantia.getFechafinayudantia());
            if (solicitudAyudantia.getMensajeParaDecano() != null) {
                gui.getDetalleSolicitarAyudantes().getTxtaComentarios().setValue(solicitudAyudantia.getMensajeParaDecano());
            } else {
                gui.getDetalleSolicitarAyudantes().getTxtaComentarios().setValue(Constantes.Mensajes.noComentarios);
            }
//	      gui.getMenu().setTitulo("Solicitud Ayudantía "+tipoAyudantia.getNombre()+" "+ nombreAyudantia);
            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.getDetalleSolicitarAyudantes().getTxtAActividad().setValue(solicitudAyudantia.getActividadarealizar());
            gui.getTxtaComentarios().setText("");

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            exception.printStackTrace();
            Logger.getLogger(CTRL_RevisarSolicitud.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public boolean aceptar() throws MensajeException {
        realizarActividad("Aprobar");
        return true;
    }

    public boolean devolver() throws MensajeException {
        FacesMessage mensaje;
        if (gui.getTxtaComentarios().getText().equals("")) {
            mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ingrese una observación para esta solicitud.", "");
            facesContext.addMessage(gui.getTxtaComentarios().getClientId(facesContext), mensaje);
            return false;
        }
        realizarActividad("Devolver");
        return true;
    }

    public boolean rechazar() throws MensajeException {
        FacesMessage mensaje;
        if (gui.getTxtaComentarios().getText().equals("")) {
            mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ingrese una observación para esta solicitud.", "");
            facesContext.addMessage(gui.getTxtaComentarios().getClientId(facesContext), mensaje);
            return false;
        }
        realizarActividad("Rechazar");
        return true;
    }

    private void realizarActividad(String decision) throws MensajeException {
        String nombreInstancia;
        BnNodeValue actividad;
        Solicitudayudantia solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogAyudantia().leerSolicitudayudantia(idSolicitud);
            solicitud.setObservacionEvaluador((String) gui.getTxtaComentarios().getText());
            int idDecano = new Integer(logica.leerPersonaPorUsuario(usuario.getUsuario()).getIdPersona());
            solicitud.setFkiddecano(idDecano);

            solicitud = logica.getLogAyudantia().guardarYClonarSolicitudAyudantia(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.decisionRevision, decision);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudAyudantia() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);

              //enviar mail de notificacion
            int idSolicitudCompleta = solicitud.getFkParent();
            String subject = "";
            String message = "";
            String to = "";

            solicitud = logica.getLogAyudantia().leerSolicitudayudantiaNivel2(idSolicitudCompleta);
           if (decision.equals(Constantes.Atributo.Decision.Aprobar.toString())) {
               to = logica.leerPersona(solicitud.getFkIdProfesor()).getCorreo();
               System.out.println("idpofesrsf " +solicitud.getFkIdProfesor());
                subject = Constantes.MensajesCorreo.tituloCorreo + "Su Solicitud de Ayudantes ha sido aprobada";
                message = Constantes.TipoSolicitud.Ayudantia + "_" + solicitud.getIdSolicitudAyudantia() + " " +
                        "\n\n" + "Título: " + solicitud.toString() + "\n" +
                        "Solicitante: " + logica.leerPersona(solicitud.getIdSolicitudAyudantia()).toString() + "\n\n" +
                        "Su Solicitud de Ayudantes ha sido aprobada por el Decano de la Facultad." + "\n\n"
                        + "Puede revisar su solicitud dirigiéndose a la sección de solicitudes activas del sistema."
                        + Constantes.MensajesCorreo.referenciaSistema;
            }

            if (decision.equals(Constantes.Atributo.Decision.Rechazar.toString())) {
                to = logica.leerPersona(solicitud.getFkIdProfesor()).getCorreo();
                subject = Constantes.MensajesCorreo.tituloCorreo + "Su Solicitud de Ayudantes ha sido rechazada";
                message = Constantes.TipoSolicitud.Ayudantia + "_" + solicitud.getIdSolicitudAyudantia() + " " +
                        "\n\n" + "Título: " + solicitud.toString() + "\n" +
                        "Solicitante: " + logica.leerPersona(solicitud.getFkIdProfesor()).toString() + "\n\n" +
                        "Su Solicitud de Ayudantes ha sido rechazada por el Decano de la Facultad." + "\n" + "Observaciones: "
                        + solicitud.getObservacionEvaluador() + "\n\n" + "Puede revisar su solicitud dirigiéndose a la sección historial del sistema."
                        + Constantes.MensajesCorreo.referenciaSistema;
            }
            if (decision.equals(Constantes.Atributo.Decision.Devolver.toString())) {
                to = logica.leerPersona(solicitud.getFkIdProfesor()).getCorreo();
                subject = Constantes.MensajesCorreo.tituloCorreo + "Su Solicitud de Ayudantes ha sido devuelta";
                message = Constantes.TipoSolicitud.Ayudantia + "_" + solicitud.getIdSolicitudAyudantia() + " " +
                        "\n\n" + "Título: " + solicitud.toString() + "\n" +
                        "Solicitante: " + logica.leerPersona(solicitud.getFkIdProfesor()).toString() + "\n\n" +
                        "Su Solicitud de Ayudantes ha sido devuelta por el Decano de la Facultad." + "\n" + "Observaciones: "
                        + solicitud.getObservacionEvaluador() + "\n\n" + "Puede reiniciar su solicitud dirigiéndose a la sección acividades pendientes del sistema." + Constantes.MensajesCorreo.referenciaSistema;
            }
            SendMailEspol sendMail = new SendMailEspol(to, subject, message);
            sendMail.send();

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_RevisarSolicitud.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }
}
